Ví dụ Mã spaghetti

Đoạn mã dưới đây được coi là một ví dụ thông thường của mã spaghetti trong ngôn ngữ BASIC. Chương trình in từng số từ 1 đến 100 lên màn hình cùng với bình phương của nó. Ở đây việc thụt đầu dòng không hề được sử dụng để làm rõ sự khác nhau giữa nhiều hành động khác nhau do mã lệnh thực hiện, và các câu lệnh GOTO của chương trình tạo ra một sự lệ thuộc chặt chẽ vào số dòng (en). Luồng thực thi từ miền này sang miền khác khó dự đoán hơn. Sự xuất hiện của mã spaghetti trong thế giới thực thì phức tạp hơn và có thể thêm rất nhiều vào chi phí bảo trì cho chương trình.

1 i=02 i=i+13 PRINT i; "bình phương=";i*i4 IF i>=100 THEN GOTO 65 GOTO 26 PRINT "Chương trình đã hoàn tất."7 END

Đây cũng là mã trên nhưng được viết lại theo kiểu lập trình có cấu trúc:

1 FOR i=1 TO 1002   PRINT i;"bình phương=";i*i3 NEXT i4 PRINT "Chương trình đã hoàn tất."5 END

Chương trình trên đây cũng nhảy từ miền này sang miền khác, nhưng bước nhảy đấy thì mang tính hình thức và dễ dự đoán hơn, bởi vì vòng lặp for (en) và hàm đều cung cấp sự điều khiển luồng có kiểm soát còn câu lệnh goto lại khuyến khích điều khiển luồng tùy ý.

Mặc dù ví dụ trên này thì nhỏ, các chương trình trong thế giới thực thì được cấu thành từ nhiều dòng mã và nếu được viết theo kiểu cách mã spaghetti thì sẽ khó bảo trì.

Đây là một ví dụ khác về mã Spaghetti trong đó câu lệnh GOTO bị lạm dụng (ăn sâu vào logic của chương trình) và được dùng với các nhãn (label) có tên không rõ ràng.

SCREEN 0 INPUT "Bao nhiêu số để sắp xếp? "; T DIM n(T) FOR i = 1 TO T   PRINT "SỐ THỨ:"; i   INPUT n(i) NEXT i 'Nhiều tính toán: C = TE180: C = INT(C / 2) IF C = 0 THEN GOTO C330 D = T - C E = 1I220: f = EF230: g = f + C SWAP n(f), n(g) f = f - C IF f > 0 THEN GOTO F230 E = E + 1 IF E > D THEN GOTO E180GOTO I220C330: PRINT "Liệt kê theo thứ tự là" FOR i = 1 TO T   PRINT n(i) NEXT i